A compiler is a type of computer program (or set of programs) that transforms source code written in a programming language (the source language) into another computer language (the target language) to create executable programs that will run accurately on some form of computing device. During compilation of the source code, the compiler may produce output including error messages, diagnostics, such as warnings or other information describing various aspects of the compilation, and/or executable object code (e.g. an executable program).
Compilers are intended to be used frequently and are critical to the software development process. Accordingly, the integrity of compilers must continuously be maintained and verified to ensure that the compiler implementation conforms to the source language's specifications, the compiler generates accurate object code, and ultimately that the compiler generates properly functioning executable programs. Thus, compilers are constantly being tested to isolate and identify any bugs and/or logical errors that may exist.
Conventional testing methodologies, however, may be both limited in analysis and time-consuming. Compilers are continuously being maintained, modified, and/or upgraded to support the expanding functionality of programming languages and the increasing complexity of computer architectures. Conventional testing methods may fail to identify unintended behavioral changes that were inadvertently introduced with various modifications made to the compiler over time. Accordingly, as compilers become increasingly complex, more sophisticated testing techniques are needed. It is with these observations in mind, among others, that various aspects of the present disclosure were developed.